`timescale 1ns / 1ps

module controladorFSM(_clk_i,_sync_rst_i, inicia_i, _sync_up_i,_sync_down_i,velocidad_i,
							 posicion_bola_fila_o, posicion_bola_columna_o,posicion_paleta,fin_juego_o);
	//Inputs
	input _clk_i;
	input _sync_rst_i;
	input inicia_i;
	input _sync_up_i;
	input _sync_down_i;
	input [3:0] velocidad_i;
	
	//Outputs
	output [9:0] posicion_bola_fila_o;
	output [9:0] posicion_bola_columna_o;
	output [9:0] posicion_paleta;
	output fin_juego_o;

	wire inicia_contador_fila;
	wire inicia_contador_columna;
	wire [3:0] velocidad_fila;
	wire [3:0] velocidad_columna;
	wire pierde;
	wire inicia_minor;
	wire mueve_fila;
	wire mueve_columna;
	
	contador contador(._clk_i(_clk_i),._sync_rst_i(_sync_rst_i),.inicia_contador_fila_i(inicia_contador_fila),
							.inicia_contador_columna_i(inicia_contador_columna),.velocidad_fila_i(velocidad_fila),
							.velocidad_columna_i(velocidad_columna),.termino_contador_fila_o(mueve_fila),
							.termino_contador_columna_o(mueve_columna));
	
	major_FSM major_FSM(._clk_i(_clk_i),._sync_rst_i(_sync_rst_i),._sync_up_i(_sync_up_i),._sync_down_i(_sync_down_i),
							.inicia_i(inicia_i), .pierde_i(pierde), .posicion_paleta_o(posicion_paleta), 
							.inicia_fsm_minor_o(inicia_minor),.fin_juego_o(fin_juego_o));							
	
	minor_FSM minor_FSM(._clk_i(_clk_i),._sync_rst_i(_sync_rst_i),.velocidad_i(velocidad_i),.mueve_fila_i(mueve_fila),
							  .mueve_columna_i(mueve_columna),.inicia_i(inicia_minor),.paleta_i(posicion_paleta),
							  .perdio_o(pierde),.inicia_fila_o(inicia_contador_fila), .inicia_columna_o(inicia_contador_columna),
							  .posicion_bola_fila_o(posicion_bola_fila_o),.posicion_bola_columna_o(posicion_bola_columna_o),
							  .velocidad_fila_o(velocidad_fila),.velocidad_columna_o(velocidad_columna));
							
endmodule
